// 导入 axios
import store from '@/store'
import axios from 'axios'
import {
  Message
} from 'element-ui'

import router from '../router/index'
// 导入获取时间戳函数
import {
  getTimeStamp
} from '@/utils/auth'

// import {
//   logout
// } from '../store/modules/user.js'
// 定义超时时间
const TimeOut = 30 * 60 * 1000
// const TimeOut = 5 * 1000

// 创建 axios 副本
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASEURL,
  // 设置超时时间
  // TimeOut: 5000
})
// 设置拦截器
// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 判断token是否过期
    const currentTime = Date.now()
    // 得到token的保存时间
    const tokenTime = getTimeStamp()
    // 得到两者的时间间隔
    const space = currentTime - tokenTime
    // 判断时间间隔是否大于超时时间TimeOut
    if (space > TimeOut) {
      // 已经超时
      // 清除token,跳转到登录页面，中断后续请求
      store.dispatch('user/logout')
      // 提示错误
      Message({
        type: 'error',
        message: '登录超时，请重新登录'
      })
      router.push(`/login?_redirect=${window.location.href.split('#')[1]}`)
      return Promise.reject(new Error('登录超时，请重新登录'))
    }

    // 统一注入token
    // 得到token
    const token = store.getters.token
    if (token) {
      // 将token添加到请求头中
      config.headers.Authorization = `Bearer ${token}`
    }
    // 成功回调
    return config
  },
  error => {
    // 失败的回调
    return Promise.reject(error)
  }
)
// 响应拦截器
instance.interceptors.response.use(
  // 成功时的回调
  response => {
    // 接收返回信息
    // 解构 response
    const {
      success,
      message
    } = response.data
    // 判断 sucess
    if (success) {
      // 成功回调
      return response.data
    } else {
      // 提示错误
      Message({
        message: message,
        type: 'error'
      })
      // 失败
      return Promise.reject(new Error(message))
    }
  },
  // 错误时的回调
  error => {
    // 接收返回的错误信息中的code,并且判断code === 10002
    const bool = error.response && error.response.data && error.response.data.code === 10002
    // console.log(bool);
    if (bool) {
      Message({
        type: 'warning',
        center: true,
        message: '登录过期，请重新登录'
      })
      // 如果等于说明token失效，需要清除token重新登录
      store.dispatch('user/logout')
      // 跳转到登录页面
      // 先将当前访问的页面路径记录下来
      const url = window.location.href.split('#')[1]
      // 保存到login的路径中
      router.push(`login?_redirect=${url}`)
    }

    return Promise.reject(error)
  }
)
// 暴露 instance
export default instance
